package com.sea.base.activities

import android.os.Bundle
import android.view.View
import androidx.annotation.DrawableRes
import androidx.viewbinding.ViewBinding
import com.sea.base.ext.view.FrameLayoutLayoutParams
import com.sea.base.ext.view.MATCH_PARENT
import com.sea.base.utils.StatusNavigationBarUtil
import com.sea.base.widget.FitsSystemWindowsFrameLayout
import com.sea.base.widget.FitsSystemWindowsFrameLayout.Companion.IME_TYPE_ADJUST_RESIZE
import com.sea.base.widget.MyNestedScrollView

/**
 * 用于全屏展示的页面，对于布局实现无感无需设置上下margin
 * 全屏背景、显隐等方法[openTransparencyBar]、[paddingStatusBar]、[paddingNavigationBar]、[getDefFullBackgroundRes]、[clipChildren]
 */
abstract class BaseFullscreenKtActivity<T : ViewBinding> : BaseKtActivity<T>() {

    private var _fullRoot: FitsSystemWindowsFrameLayout? = null
    private val fullRoot get() = _fullRoot ?: throw IllegalStateException("请不要在super.onCreate前调用相关设置")

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (openTransparencyBar()) {
            StatusNavigationBarUtil.transparencyBar(this, isLightStatusBar())
        }
    }

    final override fun setContentViewByBase() {
        _fullRoot = FitsSystemWindowsFrameLayout(this).apply { layoutParams = FrameLayoutLayoutParams(MATCH_PARENT, MATCH_PARENT) }
        setFullBackground(getDefFullBackgroundRes())
        super.setContentView(fullRoot)
        setContentView(vb?.root)
    }

    override fun setContentView(view: View?) {
        fullRoot.removeAllViews()
        view?.let {
            fullRoot.addView(it)
        }
    }

    override fun onPagerBindViewPrepare() {

    }

    /**
     * 是否透明并延伸到状态栏
     */
    protected open fun openTransparencyBar() = true

    /**
     * true：浅色主题状态栏变为黑色字体，false：深色主题状态栏变为白色字体
     */
    protected open fun isLightStatusBar() = true

    /**
     * 对状态栏加padding，防止布局展示到状态栏上，默认true
     */
    var paddingStatusBar
        get() = fullRoot.paddingStatusBar
        set(value) {
            if (openTransparencyBar()) {
                fullRoot.paddingStatusBar = value
            }
        }

    /**
     * 导航栏加padding，默认true
     */
    var paddingNavigationBar
        get() = fullRoot.paddingNavigationBar
        set(value) {
            if (openTransparencyBar()) {
                fullRoot.paddingNavigationBar = value
            }
        }

    /**
     * 导航栏原本是半透明的，默认将导航栏设置为全透明，默认true全透明
     */
    var transparentNavigationBar
        get() = fullRoot.transparentNavigationBar
        set(value) {
            if (openTransparencyBar()) {
                fullRoot.transparentNavigationBar = value
            }
        }

    /**
     * 软键盘属性，和“android:windowSoftInputMode”一样，见[IME_TYPE_ADJUST_RESIZE]，默认nothing界面固定不会变
     */
    var imeType
        get() = fullRoot.imeType
        set(value) {
            if (openTransparencyBar()) {
                fullRoot.imeType = value
            }
        }

    /**
     * 压缩模式：压缩后EditText弹起后底部至少留的距离，如果想展示到底部可以写一个很大值
     * 注意：实现者是[MyNestedScrollView]，所以你需添加[MyNestedScrollView]
     */
    var adjustResizeEditTextMinBottomMargin: Int
        get() = fullRoot.adjustResizeEditTextMinBottomMargin
        set(value) {
            fullRoot.adjustResizeEditTextMinBottomMargin = value
        }

    /**
     * 平移模式：修改平移距离（由于平移时极易出现EditText不可见，而要计算EditText不可见并校正需要花费不少时间，直接写也更自由和方便）
     * 以弹起为相对位置继续平移距离，>0表示继续向下平移指定距离，=0表示默认距离，<0表示继续向上平移指定距离
     */
    var imeTypeOffset
        get() = fullRoot.imeTypeOffset
        set(value) {
            fullRoot.imeTypeOffset = value
        }

    /**
     * 设置不裁剪子类，以便于完全自定义
     */
    var clipChildren: Boolean
        get() = fullRoot.clipChildren && fullRoot.clipToPadding
        set(value) {
            fullRoot.clipChildren = value
            fullRoot.clipToPadding = value
        }

    /**
     * 默认背景色，当前默认为白色，不需要可以返回0
     */
    @DrawableRes
    protected open fun getDefFullBackgroundRes() = com.sea.base.R.color.c_fff

    fun setFullBackground(@DrawableRes res: Int) {
        if (res != 0) {
            fullRoot.setBackgroundResource(res)
        }
    }


}